import axios from "axios";
import router from "../router";
import { ElMessage } from "element-plus";

const http = axios.create({
    baseURL: 'http://127.0.0.1:8000/', //API接口地址，设置请求的基础 URL，后续请求会自动拼接该路径。
    withCredentials:false, // 是否允许客户端ajax请求时携带cookie
    
})

// 请求拦截器
// 请求拦截器允许我们在请求发送到服务器 之前 对请求进行处理或修改。常见用途包括：

// 在请求头中添加认证信息（例如 Token）。
// 记录请求日志。
// 统一添加一些公共参数（如 API 密钥）。
// 在请求发起前进行判断和拦截，如判断用户是否登录。

http.interceptors.request.use((config) => {
    console.log("http请求之前");
    //获取token
    let token = localStorage.getItem('token')
    
    if (token) {
        config.headers.Authorization = token
    }

    return config;
}, (error) => {
    console.log("http请求错误");
    return Promise.reject(error);
});


// 响应拦截器
// 响应拦截器允许我们在服务器返回数据给客户端 之前 对响应数据进行处理或拦截。常见用途包括：

// 统一处理响应数据，简化数据解析。
// 处理错误状态码（如未授权 401）。
// 弹出错误提示信息。
// 根据不同的返回码（如 200 成功、401 未授权等）进行相应操作（如跳转页面）。
http.interceptors.response.use((response) => {
    console.log(response)
    if (response.data.code == 401) {
        return router.push("/");
    } else {
        return response;
    }

}, (error) => {
    if (error.code === "ERR_NETWORK") {
        ElMessage.error("网络异常，无法请求服务端信息！");
    }
    if (error.response.status === 401) {
        ElMessage.error("未登录或登录超时！限制本次请求操作！请求登录后继续！");
        return router.push("/");
    }

    return Promise.reject(error);
});


// 测试函数
// export const addMes = () => {
//     return { "code":11200 }
// }

export default http;

















